package com.zxy.express.cos;

import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicCOSCredentials;
import com.qcloud.cos.auth.COSCredentials;
import com.qcloud.cos.region.Region;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author zhangxiying
 * @create 2025/9/6
 */
@Configuration
public class CosConfig {

    @Autowired
    private CosProperties cosProperties;

    // 定义COSClient为单例Bean，Spring会自动管理生命周期
    // 关键：destroyMethod指定“应用关闭时自动调用cosClient.shutdown()”
    @Bean(destroyMethod = "shutdown")
    public COSClient cosClient() {
        // 1. 初始化凭证
        COSCredentials credentials = new BasicCOSCredentials(
                cosProperties.getSecretId(),
                cosProperties.getSecretKey()
        );
        // 2. 配置地域（必须和你的bucket地域一致，如ap-beijing）
        Region region = new Region(cosProperties.getRegion());
        ClientConfig clientConfig = new ClientConfig(region);

        // 3. （可选）优化连接池配置（解决大文件上传、批量上传问题）
//        clientConfig.getHttpClientConfig()
//                .setMaxConnectionsCount(50) // 最大总连接数
//                .setMaxConnectionsPerRoute(20) // 单路由最大连接数
//                .setConnectionTimeout(30000) // 连接超时（30秒）
//                .setSocketTimeout(60000); // 读写超时（60秒，适配音频等大文件）

        // 4. 创建并返回COSClient实例（Spring会自动复用这个单例）
        return new COSClient(credentials, clientConfig);
    }
}
